When developing computer software, a collection of one or more changes can be committed to be included in a subsequent build of the software project under development (i.e., the collection is checked into a system or system component where it is to be integrated into the software project under development). Such a collection can be committed together as a batch of changes. Also, a collection can be committed in an atomic commit operation, wherein the system will commit all the changes in the collection at the same time, or will commit none of the changes in the collection. In some scenarios, multiple collections of changes may be committed after a successful build of the software and before a subsequent new build of the software. The changes can be integrated into the new build of the software, and the new build can be tested. If the new build of the software fails (such as failing during compilation, failing one or more tests, and/or failing during some other phase of the build), one or more developers may be notified of the failure. One of the developers may diagnose the build failure and notify a developer who is an author of a change collection that introduced a defect that contributed to the failure. That author developer may then be given an opportunity to fix the defective code change collection (source code, script, etc.), and commit the fixed change collection. Another new build of the software can then be attempted with the fixed change collection. If this other new build succeeds, the developers on the software project can be notified that the build succeeded. In this scenario, developers may be blocked from committing changes for the software project from the time that the build fails until the other new build succeeds.